#include "func_ui.h"
#include "esp_lvgl_port.h"
#include "esp_log.h"
#include "logic_analyzer_ui.h"
#include "ac_control_ui.h"
#include "ai_chat_ui.h"
#include "ammeter_ui.h"
#include "ble_speaker_ui.h"
#include "calculator_ui.h"
#include "dac_fx_ui.h"
#include "download_ui.h"
#include "location_ui.h"
#include "logic_analyzer_ui.h"
#include "minigame_ui.h"
#include "music_ui.h"
#include "oscilloscope_ui.h"
#include "OTA_ui.h"
#include "pd_ui.h"
#include "pwm_ui.h"
#include "setting_ui.h"
#include "stopwatch_ui.h"
#include "usb_aux_screen_ui.h"
#include "video_ui.h"
#include "voice_recorder_ui.h"
#include "wired_debug_ui.h"
#include "wireless_debug_ui.h"
#include "wifi_setting_ui.h"
#include "usb_wifi_sd_ui.h"
#include "image_ui.h"
#include "txt_read_ui.h"
#include "bilibili_ui.h"
#include "main_ui.h"

static func_list_t s_current_func_type = FUNC_MAX; //
static lv_obj_t *s_current_func_obj = NULL;
// static void func_screen_event_handler(lv_event_t *e)
// {
//     lv_event_code_t code = lv_event_get_code(e);
//     lv_obj_t *obj = lv_event_get_target(e);

//     if (code == LV_EVENT_GESTURE) {
//         lv_indev_t *indev = lv_indev_get_act();
//         lv_dir_t dir = lv_indev_get_gesture_dir(indev);
//         if (dir == LV_DIR_RIGHT) {
//             lv_obj_del(obj);                                // 删除功能界面容器
//             switch_to_main_screen();
//         }
//     }
// }
func_list_t get_current_func_type(void)
{
    return s_current_func_type;
}
void set_current_func_type(func_list_t func_type)
{
    s_current_func_type = func_type;
}
lv_obj_t *get_current_func_obj(void)
{
    return s_current_func_obj;
}
void set_current_func_obj(lv_obj_t *func_obj)
{
    s_current_func_obj = func_obj;
}
/* 根据功能类型加载对应UI到指定父对象 */
int load_func_ui(func_list_t func_type)
{
    // /* 修正边界检查条件：防止无效类型 */
    // if (func_type >= FUNC_MAX || func_type < 0)
    //     return;
    lvgl_port_lock(0); // 进入LVGL临界区（确保线程安全）
    // // 创建全屏容器作为功能界面的根对象
    // lv_obj_t * = lv_obj_create(lv_scr_act());
    // lv_obj_remove_style_all(); // 清除默认样式
    // lv_obj_set_size(, LV_PCT(100), LV_PCT(100));
    // lv_obj_set_style_bg_color(, lv_color_hex(0x000000), 0);
    // lv_obj_clear_flag(, LV_OBJ_FLAG_SCROLLABLE);

    // // 添加返回手势（右滑返回主界面）
    // lv_obj_add_event_cb(, func_screen_event_handler, LV_EVENT_GESTURE, NULL);
    // lv_obj_add_flag(, LV_OBJ_FLAG_GESTURE_BUBBLE);
    /*这个用于判断是否要加载UI*/

    lv_obj_t *func_ui = NULL;
    int ret = 0;
    /* 根据功能类型加载UI到父对象 */
    switch (func_type) {
        case FUNC_LOGIC_ANALYZER: // 逻辑分析仪
            func_ui = create_logic_analyzer_ui();
            break;
        case FUNC_WIRELESS_DEBUG: // 无线调试
            func_ui = create_wireless_debug_ui();
            break;
        case FUNC_WIRED_DEBUG: // 有线调试
            func_ui = create_wired_debug_ui();
            break;
        case FUNC_USB_WIFI_SD: // USB WiFi SD卡
            func_ui = create_usb_wifi_sd_ui();
            break;
        case FUNC_PWM_OUTPUT: // PWM输出
            func_ui = create_pwm_ui();
            break;
        case FUNC_DAC_WAVEFORM: // DAC波形
            func_ui = create_dac_fx_ui();
            break;
        case FUNC_AMMETER: // 电流表
            func_ui = create_ammeter_ui();
            break;
        case FUNC_OSCILLOSCOPE: // 示波器
            func_ui = create_oscilloscope_ui();
            break;
        case FUNC_PD_OUTPUT: // PD输出
            func_ui = create_pd_ui();
            break;
        case FUNC_STOPWATCH: // 秒表
            func_ui = create_stopwatch_ui();
            break;
        case FUNC_CALCULATOR: // 计算器
            func_ui = create_calculator_ui();
            break;
        case FUNC_IP_LOCATION: // IP定位/天气
            func_ui = create_location_ui();
            break;
        case FUNC_OFFLINE_DOWNLOAD: // 离线下载
            func_ui = create_download_ui();
            break;
        case FUNC_AC_CONTROL: // 空调遥控/RMT控制
            func_ui = create_ac_control_ui();
            break;
        case FUNC_USB_AUX_SCREEN: // USB副屏
            func_ui = create_usb_aux_screen_ui();
            break;
        case FUNC_VIDEO_PLAYER: // 视频播放
            func_ui = create_video_ui();
            break;
        case FUNC_MUSIC_PLAYER: // 音乐播放
            func_ui = create_music_ui();
            break;
        case FUNC_IMAGE_PLAYER: // 图片播放
            func_ui = create_image_ui();
            break;
        case FUNC_VOICE_RECORDER: // 录音机
            func_ui = create_voice_recorder_ui();
            break;
        case FUNC_BLE_SPEAKER: // BLE音箱
            func_ui = create_ble_speaker_ui();
            break;
        case FUNC_MINIGAME: // 小游戏
            func_ui = create_minigame_ui();
            break;
        case FUNC_TXT_READER: // 文本阅读器
            func_ui = create_txt_read_ui();
            break;
        case FUNC_BILIBILI: // 文本阅读器
            func_ui = create_bilibili_ui();
            break;
        case FUNC_AI_CHAT: // AI对话
            func_ui = create_ai_chat_ui();
            break;


        case FUNC_SYSTEM_SETTINGS: // 系统设置
            func_ui = create_settings_ui();
            break;
        case FUNC_WIFI_SETTINGS: // WIFI设置
            func_ui = create_wifi_ui();
            break;
        case FUNC_OTA_UPDATE: // OTA更新
            func_ui = create_ota_ui();
            break;
        default:
            /* 可选：处理未知类型 */
            LV_LOG_WARN("Unknown function type: %d", func_type);
            break;
    }

    if (func_ui) {
        s_current_func_type = func_type; // 更新当前功能类型
        s_current_func_obj = func_ui;    // 记录当前功能UI对象

        lv_disp_load_scr(func_ui); // 加载UI到屏幕
    } else {
        ret = -1;
    }
    lvgl_port_unlock(); // 退出LVGL临界区

    return ret;
}

/*
 * 调用此函数退出当前功能UI，返回主界面    
*/
void exit_current_func_ui(void)
{
    ESP_LOGI("debug", "s_current_func_type %d", s_current_func_type);

    if (s_current_func_type == FUNC_MAX) {
        return;
    }
    switch (s_current_func_type) {
        case FUNC_LOGIC_ANALYZER: // 逻辑分析仪
            exit_logic_analyzer_ui(s_current_func_obj);
            break;
        case FUNC_WIRELESS_DEBUG: // 无线调试
            exit_wireless_debug_ui(s_current_func_obj);
            break;
        case FUNC_WIRED_DEBUG: // 有线调试
            exit_wired_debug_ui(s_current_func_obj);
            break;
        case FUNC_USB_WIFI_SD: // USB WiFi SD卡
            exit_usb_wifi_sd_ui(s_current_func_obj);
            break;
        case FUNC_PWM_OUTPUT: // PWM输出
                              //    func_ui = create_pwm_ui();
            break;
        case FUNC_DAC_WAVEFORM: // DAC波形
                                //   func_ui = create_dac_fx_ui();
            break;
        case FUNC_AMMETER: // 电流表
                           //    func_ui = create_ammeter_ui();
            break;
        case FUNC_OSCILLOSCOPE: // 示波器
                                //     func_ui = create_oscilloscope_ui();
            break;
        case FUNC_PD_OUTPUT: // PD输出
                             //       func_ui = create_pd_ui();
            break;
        case FUNC_STOPWATCH: // 秒表
                             //func_ui = create_stopwatch_ui();
            break;
        case FUNC_CALCULATOR: // 计算器
            exit_calculator_ui(s_current_func_obj);break;
        case FUNC_IP_LOCATION: // IP定位/天气
            exit_location_ui(s_current_func_obj);
            break;
        case FUNC_OFFLINE_DOWNLOAD: // 离线下载
            //func_ui = create_download_ui();
            break;
        case FUNC_AC_CONTROL: // 空调遥控/RMT控制
            exit_ac_control_ui(s_current_func_obj);
            break;
        case FUNC_USB_AUX_SCREEN: // USB副屏
            exit_usb_aux_screen_ui(s_current_func_obj);
            break;
        case FUNC_VIDEO_PLAYER: // 视频播放
            exit_video_ui(s_current_func_obj);
            break;
        case FUNC_MUSIC_PLAYER: // 音乐播放
            exit_music_ui(s_current_func_obj);
            break;
        case FUNC_IMAGE_PLAYER: // 图片播放
            exit_image_ui(s_current_func_obj);
            break;
        case FUNC_VOICE_RECORDER: // 录音机
            exit_voice_recorder_ui(s_current_func_obj);
            break;

        case FUNC_BLE_SPEAKER: // BLE音箱
            exit_ble_speaker_ui(s_current_func_obj);
            break;
        case FUNC_MINIGAME: // 小游戏
            exit_minigame_ui(s_current_func_obj);
            break;
        case FUNC_TXT_READER: // 文本阅读器
            exit_txt_read_ui(s_current_func_obj);
            break;
        case FUNC_BILIBILI: // b站
            exit_bilibili_ui(s_current_func_obj);
            break;
        case FUNC_AI_CHAT: // AI对话
            //func_ui = create_ai_chat_ui();
            break;
        case FUNC_SYSTEM_SETTINGS: // 系统设置
            exit_settings_ui(s_current_func_obj);
            break;
        case FUNC_WIFI_SETTINGS: // WIFI设置
            exit_wifi_setting_ui(s_current_func_obj);
            break;
        case FUNC_OTA_UPDATE: // OTA更新
                              // func_ui = create_ota_ui();
            break;
        default:
            /* 可选：处理未知类型 */
            LV_LOG_WARN("Unknown function type: %d", func_type);
            break;
    }
}
